Финальное задание: программа-шагомер для фитнес-трекера
Вам подвернулся подходящий случай применить полученные знания на практике.
Знаменитая фирма Unicorn разработала новый фитнес-трекер runaway, и вас пригласили написать программный модуль для этого гаджета — ведь за время обучения вы накопили достаточный опыт в работе с подобными устройствами, и у вас даже есть фрагменты готового кода.
Заказчик составил техническое задание, которому вы должны следовать для успешного выполнения проекта. В техническом задании есть шаблон, в котором указаны константы и функции. Вам предстоит написать тело для объявленных функций и определить места их вызова. Удачи!
Техническое задание
Программный модуль для обработки данных фитнес-трекера runaway фирмы Unicorn.
Входные данные
Модуль получает от микросхемы-контроллера пакеты данных в виде кортежей.
Пакеты передаются в программу в момент обращения к трекеру (при нажатии на кнопку).
Порядок значений в пакете данных:
(<time>, <steps>)<time>: время создания пакета; значение типаstr; формат:'часы:минуты:секунды'.<steps>: количество шагов, сделанных пользователем с момента последнего обращения; значение типаint.
💡 При передаче пакетов могут случаться сбои, это надо учесть в программе. При поступлении пакета нужно проверить его; передавать пакет на обработку можно только после проверки.
Возможные ошибки при получении пакетов:
- Пакет меньшей или большей длины.
- У одного или нескольких параметров в пакете пустое значение.
- Значение времени в переданном пакете меньше или равно предыдущему записанному значению (время считается в рамках одних суток).
Результат выполнения программы
- Полученные пакеты должны сохраняться в словаре
storage_data. Ключами для него будут значения времени, а значениями — количество шагов. - В терминал должно выводиться сообщение, например такое (в начеле и в конце сообщения должна выводиться пустая строка):BASH
Время: 09:36:02. Количество шагов за сегодня: 15302. Дистанция составила 9.95 км. Вы сожгли 1512.00 ккал. Отличный результат! Цель достигнута. - Также должно выводиться мотивирующее сообщение. Его содержание должно зависеть от интенсивности тренировки:
От 6.5 км и более: 'Отличный результат! Цель достигнута.' От 3.9 км и более: 'Неплохо! День был продуктивный' От 2 км и более: 'Завтра наверстаем!' Менее 2 км: 'Лежать тоже полезно. Главное — участие, а не победа!' - Программа должна возвращать словарь
storage_data, чтобы можно было продолжить обработку данных в других программах.
💡Количество шагов, дистанция в километрах и число сожжённых калорий рассчитывается за период с начала текущих суток (с 0:00:00) до момента времени, полученного в новом пакете данных. На следующие сутки все данные обнуляются и расчёты начинаются заново, с нуля.
Точка входа в программу
Функция обработки пакетов
accept_package() — это точка входа в программу, функция, которая вызывается первой; на вход она принимает пакет с данными. Функция accept_package() должна вернуть словарь storage_data, в который добавлены данные из полученного пакета.Из этой функции по цепочке вызываются другие функции, каждая из которых отвечает за свою часть работы.
Сразу после старта должна выполниться функция
check_correct_data(), проверяющая корректность полученного пакета. Она может вернуть True или False, что повлияет на дальнейшее выполнение базовой функции.💡Вызываемые функции должны быть размещены в коде выше, чем их вызов: Python читает код сверху вниз; сначала он должен прочесть функцию, и лишь затем — вызов этой функции.
Код
xxxxxxxxxx147
93
accept_package(package_4)1
# Импортируйте необходимые модули2
3
FORMAT = # Запишите формат полученного времени.4
WEIGHT = 75 # Вес.5
HEIGHT = 175 # Рост.6
K_1 = 0.035 # Коэффициент для подсчета калорий.7
K_2 = 0.029 # Коэффициент для подсчета калорий.8
STEP_M = 0.65 # Длина шага в метрах.9
10
storage_data = {} # Словарь для хранения полученных данных.11
12
13
def check_correct_data(data):14
"""Проверка корректности полученного пакета."""15
# Если длина пакета отлична от 216
# или один из элементов пакета имеет пустое значение -17
# функция вернет False, иначе - True.18
19
20
def check_correct_time(time):21
"""Проверка корректности параметра времени."""22
# Если словарь для хранения не пустой23
# и значение времени, полученное в аргументе,24
# меньше или равно самому большому значению ключа в словаре,25
# функция вернет False.26
# Иначе - True 27
28
29
def get_step_day(steps):30
"""Получить количество пройденных шагов за этот день."""31
# Посчитайте все шаги, записанные в словарь storage_data,32
# прибавьте к ним значение из последнего пакета33
# и верните эту сумму.34
35
36
def get_distance(steps):37
"""Получить дистанцию пройденного пути в км."""38
# Посчитайте дистанцию в километрах,39
# исходя из количества шагов и длины шага.40
41
42
def get_spent_calories(dist, current_time):43
"""Получить значения потраченных калорий."""44
# В уроке «Последовательности» вы написали формулу расчета калорий.